gusucode.com > VC++ 磁盘文件编辑器 > VC++ 磁盘文件编辑器/gusucode/hexedit.cpp

    //Download by http://www.NewXing.com
/******************************************
*  CO.        : AnSon(ShunDe) CO.,LTD.    *
*  programmer : AnSon.Man                 *
*  Tel        : 13302331339               *
*  E-Mail     : manaibao@tom.com          *
******************************************/
///////////////////////////////////////////
////// AnSon Hex Editor           /////////
///////////////////////////////////////////


//#define  STRICT
#include <windows.h>
#include <winbase.h>
#include <commdlg.h>
#include "hexedit.h"

#define TimerInterval  500
#define MyWinX 640
#define MyWinY 512
/* _lopen() flags */
#define READ        0
#define WRITE       1
#define READ_WRITE  2


//************************************************************
//*********Local Function Prototypes**************************
int     PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow);
BOOL    InitApplication( HINSTANCE hInstance );
BOOL    InitInstance( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK WndProc( HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam );
BOOL    CALLBACK ModifyDlgProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
void    ReDrawImage( HWND hWnd );
BOOL    GetFileName( HWND hWnd, char FAR* lpBMPFileName, char FAR* lpstrFilter, DWORD dwFilterIndex, BOOL blOpenOrSave );
BOOL    CommandStrProc( HWND hWnd );
int     char2int(char a);
char    CHAR2HEXTXT(char a);
void    WORD2CHAR(char FAR* a, WORD b);
char    WORD2CHARINDEX(WORD b, int index);
BYTE    char2byte(char a);
BOOL    GetCmdLineValue(long FAR* lngTemp);


/****************************************************************************

/****************************************************************************/
/* Global Variables */
HINSTANCE   hInst;
HWND        hWndMain;
char        szAppName[]            = "HEXEDITOR";
char        szTitle[128]           = "Hex Editor - AnSon";
char        szHelpFileName[]       = "HEXEDIT.HLP";
char        szTaskIsRunning[]      = "You HEX EDITOR is running now!";
char        szTimerIsTooMany[]     = "The Timer is too many to be created!";
char        szGetOpenFileNameErr[] = "Get the FileName False!";
char        szFileNameFilter[]     ="All Files (*.*)\0*.*\0bmp file (*.bmp)\0*.bmp\0\0";
char        szFileHasBeenOpened[]  = "One File Has been Opened!\n\nOpen the other one, close it first.";
char        szFileHasNotBeenOpened[] = "No File has been opened!";
char        szFileOpenError[]     = "Open the File False! Perhaps it is ReadOnly.";
char        szFileSaveError[]     = "Save the File False!";
char        szCreateFileError[]   = "Create file False!\nPerhaps the disk has not enough space, or you has no purview.";
char        szEndOfFile[]         = "End of the file!";
char        szTheTextNoFine[]     = "The specific text not found!";
char        szYourInputError[]    = "Perhaps your input is error, such as it is not HexFormat, etc.";
char        szInputNoError[]      = "Tips: You input is OK!";
char        szInputError[]        = "Tips: You input is Error, check it please!";
char        szAboutStr[]          = "AnSon(R) HEX Editor.\n\nWritten by AnSon.Man(满爱宝) in Mar, 2007.";
char        szNoError[]           = "That has no Error!";
char        szHelp00[]             = "********************************************************************************";
char        szHelp01[]             = "**********  AnSon(R) HEX Editor. Written by AnSon.Man in Mar, 2007.  ***********";
char        szHelp02[]             = "********************************************************************************";
char        szHelp03[]             = "?          - Display the Help Message.";
char        szHelp04[]             = "O          - Open one file.";
char        szHelp05[]             = "N          - Input the file name and open it.";
char        szHelp06[]             = "D          - Display the FileData, HEX format. Next Page.";
char        szHelp07[]             = "Dxxxx      - Display the FileData, HEX format, special the File Position.";
char        szHelp08[]             = "Dxxxx:xxxx - Display the FileData, HEX format, special the File Position.";
char        szHelp09[]             = "E          - Modify the FileData, HEX format, current position.";
char        szHelp10[]             = "Exxxx      - Modify the FileData, HEX format, special the File Position.";
char        szHelp11[]             = "Exxxx:xxxx - Modify the FileData, HEX format, special the File Position.";
char        szHelp12[]             = "Wxxxx      - Write the FileData, bin format, special the DataByteCount.";
char        szHelp13[]             = "Wxxxx:xxxx - Write the FileData, bin format, special the DataByteCount.";
char        szHelp14[]             = "F          - Fcxxx, fine text:'xxx'; fhxx-xx-xx, fine hex byte; Fn,fine next.";
char        szHelp15[]             = "C          - Close the file.";
char        szHelp16[]             = "Q          - Exit HEX EDITOR.";
char        szHelp17[]             = "B          - Change the BackColor and the ForeColor.";
char        szHelp18[]             = "A          - About HEX EDITOR.";
char        szHelp19[]             = "This tool is use to edit the file data use hex format, you can open the normal";
char        szHelp20[]             = "file on you disk, and edit/modify the data. The file size can up to 4G bytes.";
char        szHelp21[]             = "you can save part of the file from the position of display, use W command.";
char        szHelp22[]             = "It is easy to use, to modify data, to save data; quickly save file even the";
char        szHelp23[]             = "file size is very big. It occupy least CPU time, least memory room.";
char        szHelp24[]             = "It is very GREEN to you computer system, no any waste to be produced.";
char        szHelp25[]             = "Notice: When you modify the FileData, it will be save to the file when you";
char        szHelp26[]             = "        close the file or exit the HEXEDITOR, and no any warning.";

char        szObjFileName[256]= {'\0'};
char        szWriteFileName[256]= {'\0'};
BYTE        szScreenCache[80][32];
BYTE        byteDataBuff[480];
BYTE        szFineText[128] = {'\0'};
HFILE       hFileToOpen;
BOOL        blHasBeenOpened=FALSE;
BOOL        blEndOfFile = FALSE;
BOOL        blCheckBox = FALSE;
int         intBackColor = 2;
HBITMAP     hBitMapASCII;
HDC         hDcMemASCII;
int         intPosX=0, intPosY=0;
int         intFineTextByteLen = 0;
long        lngFilePos=0, lngModifyPos=0, lngDisPos=0;
DWORD       dwWriteByteCount;

/****************************************************************************/


/****************************************************************************
*
*     FUNCTION: WinMain
*
*     PURPOSE:  Main entry point for this app
*
*     PARAMS:   HANDLE hInstance     - This instance
*               HANDLE hPrevInstance - Previous instance
*               LPSTR  lpszCmdLine   - Command Line
*               int    nCmdShow      - Desired window status
*
*     RETURNS:  int - return code
*
* History:
*                July '95 - Created
*
\****************************************************************************/
// Turn off warning: Parameter 'lpszCmdLine' is never used in function WinMain(unsigned int,unsigned int,char far*,int)
//#pragma argsused

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
    MSG   msg;
    HWND  hWndExist;

    hWndExist = FindWindow(szAppName, szTitle);
    if(hWndExist != NULL)
    {
     FlashWindow(hWndExist, TRUE);
     MessageBox( hWndExist, szTaskIsRunning, szTitle, MB_OK);
     return FALSE;
    }

    // standard init stuff
    if( ! hPrevInstance )
    {
        if( ! InitApplication( hInstance ) )
        {
            return FALSE;
        }
     }
    if( ! InitInstance( hInstance, nCmdShow ) )
    {
        return FALSE;
    }
    // Standard message loop
    while (GetMessage(&msg, (HWND) NULL, 0, 0)) 
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    return msg.wParam;
}
/* End WinMain() ************************************************************/



/****************************************************************************
*
*     FUNCTION: InitApplication
*
*     PURPOSE:  Register classes
*
*     PARAMS:   HINSTANCE hInstance     - This instance
*
*     RETURNS:  BOOL - TRUE for success, FALSE for failure
*
* History:
*                July '95 - Created
*
\****************************************************************************/
BOOL InitApplication( HINSTANCE hInstance )
{
    int         i,j;
    WNDCLASS    wc;
    for(i=0;i<80;i++)
    for(j=0;j<32;j++)
    szScreenCache[i][j]=' ';
    for(i=0;i<80;i++)
    szScreenCache[i][30]=6;
    szScreenCache[3][30]='C';
    szScreenCache[4][30]='o';
    szScreenCache[5][30]='m';
    szScreenCache[6][30]='m';
    szScreenCache[7][30]='a';
    szScreenCache[8][30]='n';
    szScreenCache[9][30]='d';
    szScreenCache[10][30]=' ';
    szScreenCache[11][30]='L';
    szScreenCache[12][30]='i';
    szScreenCache[13][30]='n';
    szScreenCache[14][30]='e';

    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = (WNDPROC)WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon( hInstance, "HEXEDITICON" );
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject( NULL_BRUSH );//GRAY_BRUSH, NULL_BRUSH r58,g110,b165
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = szAppName;

    return( RegisterClass( &wc ) );
}
/* End InitApplication() ***************************************************/



/****************************************************************************
*
*     FUNCTION: InitInstance
*
*     PURPOSE:  Create and show the main window
*
*     PARAMS:   HANDLE hInstance  - This instance
*               int    nCmdShow   - desired show state
*
*     RETURNS:  BOOL - TRUE for success, FALSE for failure
*
* History:
*                July '95 - Created
*
\****************************************************************************/
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
    RECT    DeskRect;
    int     xSize,ySize;

    hInst = hInstance;
    GetWindowRect( GetDesktopWindow(), &DeskRect );
    xSize = GetSystemMetrics(SM_CXDLGFRAME)*2+MyWinX;
    ySize = GetSystemMetrics(SM_CYDLGFRAME)*2+MyWinY+
            GetSystemMetrics(SM_CYCAPTION);
    hWndMain = CreateWindow(
        szAppName,
        szTitle,
        WS_DLGFRAME | WS_MINIMIZEBOX | WS_SYSMENU,  //WS_OVERLAPPEDWINDOW,  //WS_SYSMENU | WS_MINIMIZEBOX | WS_THICKFRAME,  //
        (DeskRect.right - xSize ) / 2,    //DeskRect.right / 4
        (DeskRect.bottom - ySize ) / 2,    //DeskRect.bottom / 4
        xSize, // window's Width  initialize
        ySize, // window's Height initialize
        NULL,
        NULL,
        hInstance,
        NULL );

    if( hWndMain == NULL )
    {
        return FALSE;
    }
    ShowWindow( hWndMain, nCmdShow );
    UpdateWindow( hWndMain );

    return TRUE;
}
/* End InitInstance() *****************************************************/


/****************************************************************************
*
*     FUNCTION: WndProc
*
*     PURPOSE:  Window Procedure for the main window.
*
*     PARAMS:   HWND   hWnd    - This window
*               UINT   Message - Which message?
*               WPARAM wParam  - message parameter
*               LPARAM lParam  - message parameter
*
*     RETURNS:  LRESULT - depends on message
*
* History:
*                July '95 - Created
*
\****************************************************************************/
LRESULT CALLBACK WndProc( HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam )
{
    
    // which message are we handling?
    switch( Message )
    {
	case WM_PAINT:
            ReDrawImage( hWndMain );
        break; // end WM_PAINT
        case WM_TIMER:
            if(szScreenCache[intPosX][31] == '_')
             szScreenCache[intPosX][31] = ' ';
            else
             szScreenCache[intPosX][31] = '_';
            InvalidateRect( hWnd, NULL, TRUE );
        break;
        case WM_CREATE:
           {
             HDC   hDC = GetDC(hWnd);

             hBitMapASCII = LoadBitmap(hInst, "ASCIIFONT");
             hDcMemASCII = CreateCompatibleDC( hDC );
             SelectObject( hDcMemASCII, hBitMapASCII );

             ReleaseDC( hWnd, hDC );
           }
           if (!SetTimer(hWnd, ID_Timer, TimerInterval, NULL))
	       MessageBox(hWnd, szTimerIsTooMany, szTitle, MB_ICONEXCLAMATION | MB_OK);
           PostMessage(hWnd, WM_CHAR, '?', 0l);
           PostMessage(hWnd, WM_CHAR, ' ', 0l);
        break; // End WM_CREATE
        case WM_KEYDOWN:
           if( ! blHasBeenOpened ) break;
           if( LOWORD( wParam ) == '!' )
           {
            PostMessage(hWnd, WM_CHAR, 'd', 0l);
            PostMessage(hWnd, WM_CHAR, '-', 0l);
            PostMessage(hWnd, WM_CHAR, ' ', 0l);
           }
           else if( LOWORD( wParam ) == '"' )
           {
            PostMessage(hWnd, WM_CHAR, 'd', 0l);
            PostMessage(hWnd, WM_CHAR, ' ', 0l);
           }
           else if( LOWORD( wParam ) == '(' )
           {
            PostMessage(hWnd, WM_CHAR, 'd', 0l);
            PostMessage(hWnd, WM_CHAR, '_', 0l);
            PostMessage(hWnd, WM_CHAR, ' ', 0l);
           }
           else if( LOWORD( wParam ) == '&' )
           {
            PostMessage(hWnd, WM_CHAR, 'd', 0l);
            PostMessage(hWnd, WM_CHAR, '~', 0l);
            PostMessage(hWnd, WM_CHAR, ' ', 0l);
           }
           else if( LOWORD( wParam ) == '$' )
           {
            PostMessage(hWnd, WM_CHAR, 'd', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, ':', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, '0', 0l);
            PostMessage(hWnd, WM_CHAR, ' ', 0l);
           }
           else if( LOWORD( wParam ) == '#' )
           {
            lngFilePos = _llseek(hFileToOpen, 0, SEEK_END) - 480;
            if(lngFilePos<0)lngFilePos=0;
            PostMessage(hWnd, WM_CHAR, 'd', 0l);
            PostMessage(hWnd, WM_CHAR, ' ', 0l);
           }
        break;
        case WM_CHAR:

            if( LOWORD( wParam ) == 0x0D || LOWORD( wParam ) == 0x20 )
            {
             CommandStrProc( hWnd );
             InvalidateRect( hWnd, NULL, TRUE );
             break;
            }
            if( LOWORD( wParam ) == 0x08 )
            {
             if(intPosX != 0)
             {
              intPosX--;
              szScreenCache[intPosX  ][31] = ' ';
              szScreenCache[intPosX+1][31] = ' ';
             }
             InvalidateRect( hWnd, NULL, TRUE );
             break;
            }
            if( VK_ESCAPE == LOWORD( wParam ) )
            {
             int i;
             for(i=0;i<80;i++)szScreenCache[i][31]=' ';
             intPosX = 0;
             InvalidateRect( hWnd, NULL, TRUE );
             break;
            }
            if(intPosX==79)break;
            szScreenCache[intPosX][31]=( LOWORD( wParam ) < 128 && LOWORD( wParam ) >= ' ' )? (BYTE)( LOWORD( wParam ) ) : '.';
            intPosX++;
            InvalidateRect( hWnd, NULL, TRUE );
        break;
        case WM_KILLFOCUS:

        break;
//******************************************
//The menu command processer is putted here.
//******************************************
        // Command Messages (menu items, etc)
        case WM_COMMAND:

            switch (LOWORD( wParam ))
              {
		 case IDC_OPENDLG:

                 break;

                 default:
                      ;
              }
        break; // End WM_COMMAND
//******************************************
//End of menu command processor.
//******************************************

        // Time to close down now :(
        case WM_CLOSE:
            if(blHasBeenOpened)_lclose(hFileToOpen);
            KillTimer(hWnd, ID_Timer);
            DeleteObject(hBitMapASCII);
            DeleteDC( hDcMemASCII );
            DestroyWindow( hWnd );
            PostQuitMessage( 0 );
        break; // End WM_CLOSE

        // Pass it on to the default window procedure
        default:
            return DefWindowProc( hWnd, Message, wParam, lParam );
    }
    return DefWindowProc( hWnd, Message, wParam, lParam );
}
/* End WndProc() ***********************************************************/


/****************************************************************************
*
*     FUNCTION: ReDrawImage
*
*     PURPOSE:  ReDraws the foreground
*
*     PARAMS:   HWND hWnd - The window's handl
*               HDC  hDC  - The DC on which to draw
*
*     RETURNS:  void
*
* History:
*                July '95 - Created
*                DEC 2006 - modified by AnSon.Man
*
\****************************************************************************/
void ReDrawImage( HWND hWnd )
{
   PAINTSTRUCT ps;
   HDC         hDC;
   int         intX, intY, rs;

   hDC = BeginPaint( hWnd, &ps );
    for(intX=0; intX<80; intX++)
    for(intY=0; intY<32; intY++)
    {
     rs = szScreenCache[intX][intY];
     if( rs>'~' )rs='?';
     BitBlt(hDC, intX * 8, intY * 16, 8, 16, hDcMemASCII, rs*8, intBackColor * 16, SRCCOPY);
    }
   EndPaint( hWnd, &ps );
   ReleaseDC( hWnd, hDC);
   return;
}
/* End ReDrawImage() ***************************************************/



/****************************************************************************
*
*     FUNCTION: GetFileName( HWND hWnd, char FAR* lpFileName, char FAR* lpstrFilter, DWORD dwFilterIndex, blOpenOrSave )
*
*     PURPOSE:  Get the open file name to open.
*
*     PARAMS:   HWND hWnd             - The window's handl
*               char FAR* lpFileName  - the return FileName's pointer
*               char FAR* lpstrFilter - the lpstrFilter's pointer
*               DWORD dwFilterIndex   - the filter's index.
*
*
*     RETURNS:  BOOL
*
* History:
*                July '95 - Created
*                DEC 2006 - modified by AnSon.Man
*
\****************************************************************************/
BOOL GetFileName( HWND hWnd, char FAR* lpFileName, char FAR* lpstrFilter, DWORD dwFilterIndex, BOOL blOpenOrSave )
{
   OPENFILENAME          ofn;
   DWORD                 Errval; // Error value
   BOOL                  blrt;

//******************************************
//Get the open file name.
//******************************************
   ofn.lStructSize       = sizeof( OPENFILENAME );
   ofn.hwndOwner         = hWnd;  // An invalid hWnd causes non-modality
   ofn.hInstance         = 0;
   ofn.lpstrFilter       = lpstrFilter; // See previous note concerning string
   ofn.lpstrCustomFilter = NULL;
   ofn.nMaxCustFilter    = 0;
   ofn.nFilterIndex      = dwFilterIndex;
   ofn.lpstrFile         = lpFileName; // Stores the result in this variable
   ofn.nMaxFile          = 256;
   ofn.lpstrFileTitle    = NULL;
   ofn.nMaxFileTitle     = 0;
   ofn.lpstrInitialDir   = NULL;
   if ( blOpenOrSave )
   {
    ofn.lpstrTitle        = "Open"; // Title for dialog
    ofn.Flags             = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
    ofn.lpstrDefExt       = "*";
   }
   else
   {
    ofn.lpstrTitle        = "Save"; // Title for dialog
    ofn.Flags             = OFN_OVERWRITEPROMPT;
    ofn.lpstrDefExt       = "";
   }
   ofn.nFileOffset       = 0;
   ofn.nFileExtension    = 0;
   ofn.lCustData         = NULL;
   ofn.lpfnHook          = NULL;
   ofn.lpTemplateName    = NULL;

   if ( blOpenOrSave )
    blrt = GetOpenFileName( &ofn );
   else
    blrt = GetSaveFileName( &ofn );

   if( ! blrt)
    {
     Errval=CommDlgExtendedError();
     if(Errval!=0)// 0 value means user selected Cancel
      {
       MessageBox(hWnd, szGetOpenFileNameErr, szTitle, MB_OK|MB_ICONSTOP);
      }
     return FALSE;
    }
   return TRUE;
}
/* End GetFileName() ***************************************************/


/****************************************************************************
*
*     FUNCTION: CommandStrProc()
*
*     PURPOSE:  Proc the string command.
*
*     PARAMS:   HWND hWnd - The window's handl
*
*     RETURNS:  BOOL
*
* History:
*                Mar 2007 - Created by AnSon.Man
*
\****************************************************************************/
BOOL CommandStrProc( HWND hWnd )
{
 int   i,j,k,intTemp;
 DWORD dwTemp=0, dwTemp0;
 DWORD dwIndex=0;
 HFILE   hWriteFile;
 LPCSTR  lpcwbf;
 lpcwbf = (LPCSTR)byteDataBuff;
 long    lngOldPos = lngDisPos;
 long    lngByteCount = 0;
 BOOL    blCheckIt;

 switch (szScreenCache[0][31])
 {
  case 'Q':
  case 'q':
   PostMessage(hWnd, WM_CLOSE, 0l, 0l);
  break;
  case '?':
    for(i=0;i<80;i++)
    for(j=0;j<30;j++)
     szScreenCache[i][j] = ' ';
    i = 0; j = 0;
    while(szHelp00[i] != '\0'){szScreenCache[i][j] = szHelp00[i];i++;}
    i = 0; j++;
    while(szHelp01[i] != '\0'){szScreenCache[i][j] = szHelp01[i];i++;}
    i = 0; j++;
    while(szHelp02[i] != '\0'){szScreenCache[i][j] = szHelp02[i];i++;}
    i = 0; j++;
    while(szHelp03[i] != '\0'){szScreenCache[i][j] = szHelp03[i];i++;}
    i = 0; j++;
    while(szHelp04[i] != '\0'){szScreenCache[i][j] = szHelp04[i];i++;}
    i = 0; j++;
    while(szHelp05[i] != '\0'){szScreenCache[i][j] = szHelp05[i];i++;}
    i = 0; j++;
    while(szHelp06[i] != '\0'){szScreenCache[i][j] = szHelp06[i];i++;}
    i = 0; j++;
    while(szHelp07[i] != '\0'){szScreenCache[i][j] = szHelp07[i];i++;}
    i = 0; j++;
    while(szHelp08[i] != '\0'){szScreenCache[i][j] = szHelp08[i];i++;}
    i = 0; j++;
    while(szHelp09[i] != '\0'){szScreenCache[i][j] = szHelp09[i];i++;}
    i = 0; j++;
    while(szHelp10[i] != '\0'){szScreenCache[i][j] = szHelp10[i];i++;}
    i = 0; j++;
    while(szHelp11[i] != '\0'){szScreenCache[i][j] = szHelp11[i];i++;}
    i = 0; j++;
    while(szHelp12[i] != '\0'){szScreenCache[i][j] = szHelp12[i];i++;}
    i = 0; j++;
    while(szHelp13[i] != '\0'){szScreenCache[i][j] = szHelp13[i];i++;}
    i = 0; j++;
    while(szHelp14[i] != '\0'){szScreenCache[i][j] = szHelp14[i];i++;}
    i = 0; j++;
    while(szHelp15[i] != '\0'){szScreenCache[i][j] = szHelp15[i];i++;}
    i = 0; j++;
    while(szHelp16[i] != '\0'){szScreenCache[i][j] = szHelp16[i];i++;}
    i = 0; j++;
    while(szHelp17[i] != '\0'){szScreenCache[i][j] = szHelp17[i];i++;}
    i = 0; j++;
    while(szHelp18[i] != '\0'){szScreenCache[i][j] = szHelp18[i];i++;}
    i = 0; j++; j++;
    while(szHelp19[i] != '\0'){szScreenCache[i][j] = szHelp19[i];i++;}
    i = 0; j++;
    while(szHelp20[i] != '\0'){szScreenCache[i][j] = szHelp20[i];i++;}
    i = 0; j++;
    while(szHelp21[i] != '\0'){szScreenCache[i][j] = szHelp21[i];i++;}
    i = 0; j++;
    while(szHelp22[i] != '\0'){szScreenCache[i][j] = szHelp22[i];i++;}
    i = 0; j ++;
    while(szHelp23[i] != '\0'){szScreenCache[i][j] = szHelp23[i];i++;}
    i = 0; j++;
    while(szHelp24[i] != '\0'){szScreenCache[i][j] = szHelp24[i];i++;}
    i = 0; j++; j++;
    while(szHelp25[i] != '\0'){szScreenCache[i][j] = szHelp25[i];i++;}
    i = 0; j++;
    while(szHelp26[i] != '\0'){szScreenCache[i][j] = szHelp26[i];i++;}
  break;
  case 'E':
  case 'e':
   if(!blHasBeenOpened)
   {
    MessageBox(hWnd, szFileHasNotBeenOpened, szTitle, MB_OK | MB_ICONASTERISK);
    break;
   }
   if( ! GetCmdLineValue( & lngModifyPos ) ) break;
   DialogBox( hInst, MAKEINTRESOURCE(IDD_MODIFYDLG), hWnd, ModifyDlgProc );
  break;
  case 'D':
  case 'd':
   if(!blHasBeenOpened)
   {
    MessageBox(hWnd, szFileHasNotBeenOpened, szTitle, MB_OK | MB_ICONASTERISK);
    break;
   }
   if( ! GetCmdLineValue( & lngFilePos ) )
   {
    if (intPosX == 2 && szScreenCache[1][31] == '-')
     lngFilePos -= 960;
    else if (intPosX == 2 && szScreenCache[1][31] == '_')
     lngFilePos -= 464;
    else if (intPosX == 2 && szScreenCache[1][31] == '~')
     lngFilePos -= 496;
    else
     break;
    if(lngFilePos <= 0 )lngFilePos = 0;
   }
   dwTemp0 = lngFilePos;
   _llseek(hFileToOpen, lngFilePos, SEEK_SET);
   dwTemp = _lread(hFileToOpen, byteDataBuff, 480);
   if(dwTemp<480)blEndOfFile=TRUE;
   else          blEndOfFile=FALSE;
   lngDisPos  = lngFilePos;
   lngFilePos = lngFilePos + dwTemp;
   for(i=0;i<80;i++)
   for(j=0;j<30;j++)
    szScreenCache[i][j] = ' ';
   i=11;
   k=j=0;
   for(dwIndex=0;dwIndex<480;dwIndex++)
   {
    szScreenCache[0][j] = WORD2CHARINDEX(HIWORD(dwTemp0), 0);
    szScreenCache[1][j] = WORD2CHARINDEX(HIWORD(dwTemp0), 1);
    szScreenCache[2][j] = WORD2CHARINDEX(HIWORD(dwTemp0), 2);
    szScreenCache[3][j] = WORD2CHARINDEX(HIWORD(dwTemp0), 3);
    szScreenCache[4][j] = ':';
    szScreenCache[5][j] = WORD2CHARINDEX(LOWORD(dwTemp0), 0);
    szScreenCache[6][j] = WORD2CHARINDEX(LOWORD(dwTemp0), 1);
    szScreenCache[7][j] = WORD2CHARINDEX(LOWORD(dwTemp0), 2);
    szScreenCache[8][j] = WORD2CHARINDEX(LOWORD(dwTemp0), 3);
    if(dwIndex<dwTemp)
    {
     szScreenCache[i  ][j] = ( byteDataBuff[dwIndex] & 0xf0 ) >> 4;
     szScreenCache[i+1][j] = ( byteDataBuff[dwIndex] & 0x0f );
     szScreenCache[i  ][j] = (szScreenCache[i  ][j] <= 9)?(szScreenCache[i  ][j] + 48):(szScreenCache[i  ][j] + 55);
     szScreenCache[i+1][j] = (szScreenCache[i+1][j] <= 9)?(szScreenCache[i+1][j] + 48):(szScreenCache[i+1][j] + 55);
     szScreenCache[k+61][j] = (byteDataBuff[dwIndex] < 127 && byteDataBuff[dwIndex] >= ' ')?(byteDataBuff[dwIndex]):'.';
    }
    else
    {
     szScreenCache[i   ][j] = ' ';
     szScreenCache[i+1 ][j] = ' ';
     szScreenCache[k+61][j] = ' ';
    }
    k++;
    if(k==8)szScreenCache[i+2][j] = '-';
    else    szScreenCache[i+2][j] = ' ';
    i += 3;
    if ( k == 16 ){ k=0; i=11; j++;dwTemp0 += 16; }
   }
  break;
  case 'F':
  case 'f':
   if(!blHasBeenOpened)
   {
    MessageBox(hWnd, szFileHasNotBeenOpened, szTitle, MB_OK | MB_ICONASTERISK);
    break;
   }
   if(intPosX<2)break;
   blCheckIt = FALSE;
   switch (szScreenCache[1][31])
   {
    case 'N':
    case 'n':
       k=intFineTextByteLen;
       lngDisPos++;
       blCheckIt = TRUE;
       break;
    case 'C':
    case 'c':
       if(intPosX<3)break;
       for(i=2;i<intPosX;i++)szFineText[i-2] = szScreenCache[i][31];
       szFineText[i-2]='\0';
       k=intPosX-2;
       intFineTextByteLen = k;
       blCheckIt = TRUE;
       break;
    case 'H':
    case 'h':
       if(intPosX<4)break;
       k=intPosX-2;
       if(((k-2)%3) != 0)break;
       k= ( k - 2 ) / 3 + 1;
       intFineTextByteLen = k;
       j=0;
       for(i=2;i<intPosX;i+=3)
       {
        if( -1 == char2int( szScreenCache[i  ][31]) ){blCheckIt = FALSE;break;}
        if( -1 == char2int( szScreenCache[i+1][31]) ){blCheckIt = FALSE;break;}
        szFineText[j] = char2byte( szScreenCache[i][31] ) * 16 + char2byte( szScreenCache[i+1][31] );
        j++;blCheckIt = TRUE;
       }
       break;
    default:
       break;
   }
       if( ( ! blCheckIt ) || k==0 )
       {
        MessageBox(hWnd, szYourInputError, szTitle, MB_OK | MB_ICONASTERISK);
        break;
       }
       blEndOfFile = FALSE;
       blCheckIt = TRUE;
       lngFilePos = lngDisPos;
       while( ! blEndOfFile )
       {
        _llseek(hFileToOpen, lngFilePos, SEEK_SET);
        intTemp = _lread(hFileToOpen, byteDataBuff, 480);
        if(intTemp<k)break;
        if(intTemp<480)
        {
         for(j=0;j<intTemp-k;j++);
         {
          blCheckIt = TRUE;
          for(i=0;i<k;i++)
          {
           if( byteDataBuff[j+i] != szFineText[i] )
           { blCheckIt=FALSE;break; }
          }
          if(blCheckIt)break;
         }
         blEndOfFile=TRUE;
        }
        else
        {
         for(j=0;j<480-k;j++)
         {
          blCheckIt = TRUE;
          for(i=0;i<k;i++)
          {
           if( byteDataBuff[j+i] != szFineText[i] )
           { blCheckIt=FALSE;break; }
          }
          if(blCheckIt)break;
         }
         blEndOfFile=FALSE;
         lngDisPos = lngFilePos;
         lngFilePos = lngFilePos + 480 - k;
         if(blCheckIt){lngDisPos += j;break;}
        }
       }
       if(blCheckIt)
       {
        lngFilePos = lngDisPos;
       }
       else
       {
        lngFilePos = lngOldPos;
        MessageBox(hWnd, szTheTextNoFine, szTitle, MB_OK | MB_ICONASTERISK);
       }
        PostMessage(hWnd, WM_CHAR, VK_ESCAPE, 0l);
        PostMessage(hWnd, WM_CHAR, 'd', 0l);
        PostMessage(hWnd, WM_CHAR, ' ', 0l);
  break;
  case 'O':
  case 'o':
   if(blHasBeenOpened)
   {
    MessageBox(hWnd, szFileHasBeenOpened, szTitle, MB_OK | MB_ICONASTERISK);
    break;
   }
   //Get file name
   if( GetFileName( hWnd, szObjFileName, szFileNameFilter, 1, TRUE ) )
   {
    for(j=15;j<80;j++)szScreenCache[j][30] = 6;
    j=0;
    while(szObjFileName[j] != '\0')j++;
    for(i=0;i<j;i++)
    if( (61 + i) > j)szScreenCache[77-j + i][30] = szObjFileName[i];
    //open it
    hFileToOpen = _lopen(szObjFileName, READ_WRITE);
    if(hFileToOpen == -1)
    {
     MessageBox(hWnd, szFileOpenError, szTitle, MB_OK | MB_ICONSTOP);
     for(j=15;j<80;j++)szScreenCache[j][30] = 6;
     blHasBeenOpened = FALSE;
    }
    else blHasBeenOpened = TRUE;
   }
   PostMessage(hWnd, WM_CHAR, 'd', 0l);
   PostMessage(hWnd, WM_CHAR, ' ', 0l);
  break;
  case 'N':
  case 'n':
   if(blHasBeenOpened)
   {
    MessageBox(hWnd, szFileHasBeenOpened, szTitle, MB_OK | MB_ICONASTERISK);
    break;
   }
   //Get file name
   if(intPosX<5)break;
   for(j=15;j<80;j++)szScreenCache[j][30] = 6;
   for(i=1;i<intPosX;i++)
   {
    szObjFileName[i-1] = szScreenCache[i][31];
    if( (61 + i) > intPosX)szScreenCache[77-intPosX + i][30] = szScreenCache[i][31];
   }
   szObjFileName[i-1]='\0';
    //open it
   hFileToOpen = _lopen(szObjFileName, READ_WRITE);
   if(hFileToOpen == -1)
   {
    MessageBox(hWnd, szFileOpenError, szTitle, MB_OK | MB_ICONSTOP);
    for(j=15;j<80;j++)szScreenCache[j][30] = 6;
    blHasBeenOpened = FALSE;
   }
   else blHasBeenOpened = TRUE;
  break;
  case 'W':
  case 'w':
   if( ! blHasBeenOpened)
   {
    MessageBox(hWnd, szFileHasNotBeenOpened, szTitle, MB_OK | MB_ICONASTERISK);
    break;
   }
   if(intPosX<5)break;
   if( ! GetCmdLineValue( & lngByteCount ) ) break;
   if( GetFileName( hWnd, szWriteFileName, szFileNameFilter, 1, FALSE ) )
   {
    hWriteFile = _lcreat( szWriteFileName, 0 );
    if (hWriteFile == -1)
    {
     MessageBox(hWnd, szCreateFileError, szTitle, MB_OK | MB_ICONSTOP );
     break;
    }
    dwTemp0 = 0;
    _llseek(hFileToOpen, lngOldPos, SEEK_SET);
    dwTemp = _lread(hFileToOpen, byteDataBuff, 480);
    lngOldPos = lngOldPos + dwTemp;
    while(dwTemp != 0)
    {
     dwTemp0 = dwTemp0 + dwTemp;
     if ( lngByteCount < (long)dwTemp0 )dwTemp = lngByteCount - (dwTemp0-dwTemp);
     _hwrite(hWriteFile, lpcwbf, dwTemp);
     _llseek(hFileToOpen, lngOldPos, SEEK_SET);
     dwTemp = _lread(hFileToOpen, byteDataBuff, 480);
     lngOldPos = lngOldPos + dwTemp;
     if ( lngByteCount < (long)dwTemp0 )break;
    }
    _lclose(hWriteFile);
   }
  break;
  case 'C':
  case 'c':
   if(blHasBeenOpened)
   {
    _lclose(hFileToOpen);
    blHasBeenOpened = FALSE;
    lngFilePos = 0;
    blEndOfFile = FALSE;
    lngModifyPos=0;
    dwWriteByteCount = 0;
    for(j=15;j<80;j++)szScreenCache[j][30] = 6;
   }
    //cls the screen
    for(i=0;i<80;i++)
    for(j=0;j<30;j++)
     szScreenCache[i][j] = ' ';
  break;
  case 'A':
  case 'a':
   MessageBox(hWnd, szAboutStr, szTitle, MB_OK | MB_ICONASTERISK);
  break;
  case 'B':
  case 'b':
   intBackColor = ( intBackColor + 1 ) % 7;
  break;
  default:
     ;
 }
 for(i=0;i<80;i++)szScreenCache[i][31]=' ';
 intPosX = 0;
 return TRUE;
}
/* End CommandStrProc() ***************************************************/

/****************************************************************************
*
*     FUNCTION: ModifyDlgProc
*
*     PURPOSE:  Handles messages for Modify Dialog
*
*     PARAMS:   HWND   hWnd    - This window
*               UINT   Msg     - Which message?
*               WPARAM wParam  - message parameter
*               LPARAM lParam  - message parameter
*
*     RETURNS:  BOOL - depends on message
*
* History:
*                JAN 2007 - Created by AnSon.Man
*                Mar 2007 - Modified by AnSon.Man
*
\****************************************************************************/
BOOL CALLBACK ModifyDlgProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
  char   szDlgItemBuff[128]={'\0'};
  char   szDlgDisBuff[128]={'\0'};
  BYTE   byteModifyBuff[16];
  int    i,j,k;
  BOOL   blByteOk=FALSE;
  DWORD  dwTemp, dwTemp0;

    switch( Msg )
    {
        case WM_INITDIALOG:
            blCheckBox = FALSE;
            dwTemp     = lngModifyPos;
            WORD2CHAR( szDlgItemBuff, HIWORD(dwTemp) );
            szDlgItemBuff[4] = ':';
            WORD2CHAR( szDlgItemBuff+5*sizeof(char), LOWORD(dwTemp) );
            szDlgItemBuff[9] = '\0';
            SetDlgItemText(hWnd, IDC_TEXT_ADD, szDlgItemBuff);
            _llseek(hFileToOpen, lngModifyPos, SEEK_SET);
            dwTemp = _lread(hFileToOpen, byteModifyBuff, 16);
            if(dwTemp==0)
            {
             PostMessage( hWnd, WM_COMMAND, IDCANCEL, 0l );
             MessageBox(hWnd, szEndOfFile, szTitle, MB_OK | MB_ICONASTERISK);
             lngModifyPos = 0;
             break;
            }
            dwWriteByteCount = dwTemp;
            for(dwTemp0=0; dwTemp0<dwTemp; dwTemp0++)
            {
             szDlgItemBuff[dwTemp0 * 3    ] = (byteModifyBuff[dwTemp0] & 0xf0) >> 4;
             szDlgItemBuff[dwTemp0 * 3    ] = (szDlgItemBuff[dwTemp0 * 3    ]<10)?(szDlgItemBuff[dwTemp0 * 3    ]+48):(szDlgItemBuff[dwTemp0 * 3    ]+55);
             szDlgItemBuff[dwTemp0 * 3 + 1] = (byteModifyBuff[dwTemp0] & 0x0f);
             szDlgItemBuff[dwTemp0 * 3 + 1] = (szDlgItemBuff[dwTemp0 * 3 + 1]<10)?(szDlgItemBuff[dwTemp0 * 3 + 1]+48):(szDlgItemBuff[dwTemp0 * 3 + 1]+55);
             szDlgItemBuff[dwTemp0 * 3 + 2] = ' ';
            }
            szDlgItemBuff[dwTemp * 3 - 1] = '\0';
            szDlgItemBuff[23] = '-';
            SetDlgItemText(hWnd, IDC_TEXT_CUR, szDlgItemBuff);
            for(dwTemp0=0; dwTemp0<dwTemp; dwTemp0++)
            {
             if(byteModifyBuff[dwTemp0] < ' ' || byteModifyBuff[dwTemp0] > '~')
              szDlgItemBuff[dwTemp0     ] = '.';
             else
              szDlgItemBuff[dwTemp0     ] = byteModifyBuff[dwTemp0];
            }
            szDlgItemBuff[dwTemp] = '\0';
            SetDlgItemText(hWnd, IDC_TEXT_CURCHAR, szDlgItemBuff);
        break;
        case WM_CLOSE:
            PostMessage( hWnd, WM_COMMAND, IDCANCEL, 0l );
        break;
        case WM_COMMAND:
            switch( HIWORD(wParam) )
            {
                case EN_CHANGE:
                    blCheckBox = ! blCheckBox;
                    PostMessage( hWnd, WM_COMMAND, IDPREVIEW, 0l );
                break;
                default:
                     ;
            }

            switch( LOWORD(wParam) )
            {
                case IDOK:
                    GetDlgItemText(hWnd, IDC_EDITTEXT, szDlgItemBuff, 127);
                    if( ! blCheckBox)
                    {
                     i=k=0;
                     while(szDlgItemBuff[i] != '\0')
                     {
                      j = i % 3;
                      if(j==0)
                      {
                       if(szDlgItemBuff[i]<'0' || szDlgItemBuff[i] > 'f'){k=0;break;}
                       if(szDlgItemBuff[i]>'9' && szDlgItemBuff[i] < 'A'){k=0;break;}
                       if(szDlgItemBuff[i]>'F' && szDlgItemBuff[i] < 'a'){k=0;break;}
                       byteModifyBuff[k] = char2byte( szDlgItemBuff[i] ) * 16;
                       blByteOk = FALSE;
                      }
                      else if(j==1)
                      {
                       if(szDlgItemBuff[i]<'0' || szDlgItemBuff[i] > 'f'){k=0;break;}
                       if(szDlgItemBuff[i]>'9' && szDlgItemBuff[i] < 'A'){k=0;break;}
                       if(szDlgItemBuff[i]>'F' && szDlgItemBuff[i] < 'a'){k=0;break;}
                       byteModifyBuff[k] += char2byte( szDlgItemBuff[i] );
                       k++;
                       blByteOk = TRUE;
                       if(k==16)break;
                      }
                      else
                       if(szDlgItemBuff[i] != ' ' ){k=0;break;}
                      i++;
                     }
                     if( k==0 || (! blByteOk) )break;
                     _llseek(hFileToOpen, lngModifyPos, SEEK_SET);
                     _lwrite(hFileToOpen, (LPCSTR)byteModifyBuff, k);
                    }
		    else
                    {
                     szDlgItemBuff[16] = '\0';
                     i=0;
                     while(szDlgItemBuff[i] != '\0')i++;
                     if (i==0)break;
                     _llseek(hFileToOpen, lngModifyPos, SEEK_SET);
                     _lwrite(hFileToOpen, (LPCSTR)szDlgItemBuff, i);
                    }
                    EndDialog( hWnd, TRUE );
                break;

                case IDPREVIEW:
                    blCheckBox = ! blCheckBox;
                    GetDlgItemText(hWnd, IDC_EDITTEXT, szDlgItemBuff, 127);
                    if( ! blCheckBox)
                    {
                     i=k=0;
                     while(szDlgItemBuff[i] != '\0')
                     {
                      j = i % 3;
                      if(j==0)
                      {
                       if(szDlgItemBuff[i]<'0' || szDlgItemBuff[i] > 'f'){k=0;break;}
                       if(szDlgItemBuff[i]>'9' && szDlgItemBuff[i] < 'A'){k=0;break;}
                       if(szDlgItemBuff[i]>'F' && szDlgItemBuff[i] < 'a'){k=0;break;}
                       byteModifyBuff[k] = char2byte( szDlgItemBuff[i] ) * 16;
                       blByteOk = FALSE;
                      }
                      else if(j==1)
                      {
                       if(szDlgItemBuff[i]<'0' || szDlgItemBuff[i] > 'f'){k=0;break;}
                       if(szDlgItemBuff[i]>'9' && szDlgItemBuff[i] < 'A'){k=0;break;}
                       if(szDlgItemBuff[i]>'F' && szDlgItemBuff[i] < 'a'){k=0;break;}
                       byteModifyBuff[k] += char2byte( szDlgItemBuff[i] );
                       k++;
                       blByteOk = TRUE;
                       if(k==16)break;
                      }
                      else
                       if(szDlgItemBuff[i] != ' ' ){ k=0;break; }
                      i++;
                     }
                     if( ( ! blByteOk ) || k==0 )
                      SetDlgItemText(hWnd, IDC_TEXT_TIPS, szInputError);
                     else
                      SetDlgItemText(hWnd, IDC_TEXT_TIPS, szInputNoError);
                     szDlgItemBuff[23] = '-';
                     szDlgItemBuff[47] = '\0';
                     SetDlgItemText(hWnd, IDC_TEXT_PRV, szDlgItemBuff);
                     for(i=0;i<k;i++)
                     {
                      if(byteModifyBuff[i] < ' ' || byteModifyBuff[i] > '~')
                       szDlgDisBuff[i] = '.';
                      else
                       szDlgDisBuff[i] = byteModifyBuff[i];
                     }
                     szDlgDisBuff[i] = '\0';
                     SetDlgItemText(hWnd, IDC_TEXT_PRVCHAR, szDlgDisBuff);
                    }
                    else
                    {
                     SetDlgItemText(hWnd, IDC_TEXT_TIPS, szInputNoError);
                     szDlgItemBuff[16] = '\0';
                     SetDlgItemText(hWnd, IDC_TEXT_PRV, szDlgItemBuff);
                     SetDlgItemText(hWnd, IDC_TEXT_PRVCHAR, szDlgItemBuff);
                    }
                break;
                case IDCANCEL:
                    EndDialog( hWnd, FALSE );
                break;
                default:
                     ;
            }
        break;
        default:
            return FALSE;
    }
    return TRUE;
}
/* End ModifyDlgProc() ****************************************************/


/****************************************************************************
*
*     FUNCTION: char2int(char a)
*
*     PURPOSE:  convert one HEX's char into int, for example: 'A' -> 10, '0' -> 0;
*
*     PARAMS:   char a         - HEX's char
*
*     RETURNS:  int            - return the int value
*
* History:
*                Mar 2007 - Created by AnSon.Man
*
\****************************************************************************/
int char2int(char a)
{
 int rs;
 if     ( a>='0' && a<='9' )rs = (a - '0');
 else if( a>='A' && a<='F' )rs = (a - 'A'+10);
 else if( a>='a' && a<='f' )rs = (a - 'a'+10);
 else                         rs = -1;
 return rs;
}
/* End char2int() ***************************************************/

BYTE char2byte(char a)
{
 if(a<'A')
  return (a - '0');
 if(a<'a')
  return (a - 'A' + 10);
 return (a - 'a' + 10);
}

char CHAR2HEXTXT(char a)
{
 char b;
 if(a<0 || a>15)return ((char)(0xff));
 b = (a<10)?(a+48):(a+55);
 return b;
}
void WORD2CHAR(char FAR* a, WORD b)
{
 *a     = (char)((b & 0xf000) >> 12);
 *a     = ((*a) <= 9)?(*a + 48):(*a + 55);
 *(a+1) = (char)((b & 0x0f00) >> 8);
 *(a+1) = ((*(a+1)) <= 9)?(*(a+1) + 48):(*(a+1) + 55);
 *(a+2) = (char)((b & 0x00f0) >> 4);
 *(a+2) = ((*(a+2)) <= 9)?(*(a+2) + 48):(*(a+2) + 55);
 *(a+3) = (char)(b & 0x000f);
 *(a+3) = ((*(a+3)) <= 9)?(*(a+3) + 48):(*(a+3) + 55);
}

char WORD2CHARINDEX(WORD b, int index)
{
 char a;
 b = b & (0xf000 >> (index*4));
 b = b >> (12 - index * 4);
 a = (char)b;
 a = (a <= 9)?(a+48):(a+55);
 return a;
}

BOOL GetCmdLineValue(long FAR* lngTemp)
{
   DWORD  dwTemp0, dwIndex;
   if(intPosX == 5)
   {
    if( char2int( szScreenCache[1][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[2][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[3][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[4][31] ) == -1 )return FALSE;
    dwIndex    = ((DWORD)(char2int( szScreenCache[1][31] )))*0x1000 + 
                 ((DWORD)(char2int( szScreenCache[2][31] )))*0x100 +
                 ((DWORD)(char2int( szScreenCache[3][31] )))*0x10 +
                 ((DWORD)(char2int( szScreenCache[4][31] )));
    dwTemp0 = *lngTemp;
    dwTemp0 = (dwTemp0 - ( dwTemp0 % 0x10000 ) + dwIndex);
    *lngTemp = dwTemp0;
    return TRUE;
   }
   else if(intPosX == 10)
   {
    if( char2int( szScreenCache[1][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[2][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[3][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[4][31] ) == -1 )return FALSE;
    dwIndex    = ((DWORD)(char2int( szScreenCache[1][31] )))*0x1000 + 
                 ((DWORD)(char2int( szScreenCache[2][31] )))*0x100 +
                 ((DWORD)(char2int( szScreenCache[3][31] )))*0x10 +
                 ((DWORD)(char2int( szScreenCache[4][31] )));
    if( char2int( szScreenCache[6][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[7][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[8][31] ) == -1 )return FALSE;
    if( char2int( szScreenCache[9][31] ) == -1 )return FALSE;
    dwTemp0    = ((DWORD)(char2int( szScreenCache[6][31] )))*0x1000 + 
                 ((DWORD)(char2int( szScreenCache[7][31] )))*0x100 +
                 ((DWORD)(char2int( szScreenCache[8][31] )))*0x10 +
                 ((DWORD)(char2int( szScreenCache[9][31] )));
    dwIndex = (dwIndex << 16) + dwTemp0;
    *lngTemp = dwIndex;
    return TRUE;
   }
   else if(intPosX == 1)
    return TRUE;
   else
    return FALSE;
}